local cofork = reload("thread.fork")
local codile = reload("global.codile")
local cobusy = reload("global.cobusy")
return function ()
    ---暂时不能放上面
    local delt = reload("delt")
    local co = table.remove(codile)
    if not co then
        co = coroutine.wrap(function ()
            while true do
                ---协程执行处理
                local func, list = coroutine.yield(true)
                ---获取当前协程
                local carg = list.carg
                cobusy[carg] = true
                carg.th = coroutine.running()
                ---执行协程业务
                func(table.unpack(list))
                ---协程结束之后
                if self and carg then
                    ---协程结束
                    self:coexit(carg)
                    ---协程回收
                    self:cofork(carg)
                else
                    ---协程回收
                    cofork(carg)
                end
                delt(list)
            end
        end)
        co() --创建的时候要运行一次
    end
    return co
end
